//
// Created by madison on 2022/1/6.
//

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* 函数声明 */
double getAverage(int arr[], int size);

/* 要生成和返回随机数的函数 */
int *getRandom() {
    static int r[10];
    int i;

    /* 设置种子 */
    srand((unsigned) time(NULL));
    for (i = 0; i < 10; ++i) {
        r[i] = rand();
        printf("r[%d] = %d\n", i, r[i]);

    }

    return r;
}

void fun() {
    /* 带有 5 个元素的整型数组 */
    double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
    double *p;

    p = balance;

    /* 输出数组中每个元素的值 */
    printf("使用指针的数组值\n");
    for (int i = 0; i < 5; i++) {
        printf("*(p + %d) : %f\n", i, *(p + i));
    }

    printf("使用 balance 作为地址的数组值\n");
    for (int i = 0; i < 5; i++) {
        printf("*(balance + %d) : %f\n", i, *(balance + i));
    }
}

int main() {
    int n[10]; /* n 是一个包含 10 个整数的数组 */

    /* 初始化数组元素 */
    for (int i = 0; i < 10; i++) {
        n[i] = i + 100; /* 设置元素 i 为 i + 100 */
    }

    /* 输出数组中每个元素的值 */
    for (int j = 0; j < 10; j++) {
        printf("Element[%d] = %d\n", j, n[j]);
    }

    /* 一个带有 5 行 2 列的数组 */
    int a[5][2] = {{0, 0},
                   {1, 2},
                   {2, 4},
                   {3, 6},
                   {4, 8}};

    /* 输出数组中每个元素的值 */
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 2; j++) {
            printf("a[%d][%d] = %d\n", i, j, a[i][j]);
        }
    }

    /* 带有 5 个元素的整型数组 */
    int balance[5] = {1000, 2, 3, 17, 50};
    double avg;

    /* 传递一个指向数组的指针作为参数 */
    avg = getAverage(balance, 5);

    /* 输出返回值 */
    printf("平均值是： %f ", avg);


    /* 一个指向整数的指针 */
    int *p;
    int i;

    p = getRandom();
    for (i = 0; i < 10; i++) {
        printf("*(p + %d) : %d\n", i, *(p + i));
    }

//    指向数组的指针
    fun();
    return 0;
}


double getAverage(int arr[], int size) {
    int i;
    double avg;
    double sum = 0;

    for (i = 0; i < size; ++i) {
        sum += arr[i];
    }

    avg = sum / size;

    return avg;
}